#include "All.h"

unsigned int KEY_qq=0; 
unsigned char key_ii=0;
unsigned char KEY_VALUE=0x00;
unsigned int KEY_op=0x03FF;  //更改键值  未完成
tKEY_S KEY_s;
tKEY_Var KEY_Var;
void Key_GPIO_init(void)
{
	GPIO_InitType  GPIO_InitStructure;	
	RCC_EnableAPB2PeriphClk(Key_RCC,ENABLE);
	GPIO_InitStructure.Pin = Key_Row_IO; 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 
	GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure);
	
	GPIO_InitStructure.Pin = Key_Column_IO; 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
	GPIO_InitPeripheral(GPIOE, &GPIO_InitStructure);		
}	



void Key_Time(void)
{
	KEY_Scan();
	if(KEY_Var.Ms!=0)KEY_Var.Ms--;
}	

void KEYs_Init(void)
{
	KEY_s.KeyCnt1 = 0;
	KEY_s.Keylock1 = 0;
	KEY_s.KeyValue = 0;
	KEY_s.KeyLongValue = 0;
	KEY_s.ShortKeyFlag1 = 0;
	KEY_s.x = 0;
	KEY_s.y = 0;
	KEY_s.z = 0;
}

void KEY_Scan(void)
{
		KEY_qq=0;
		GPIO_ResetBits(Key_Column_GPIO,GPIO_PIN_1);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_2);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_3);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_4);	
	    __NOP();__NOP();__NOP();__NOP();__NOP();
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_9)==0)KEY_qq=0x000001;
		else
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_6)==0)KEY_qq=0x000002;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_7)==0)KEY_qq=0x000004;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_8)==0)KEY_qq=0x000008;	

		GPIO_ResetBits(Key_Column_GPIO,GPIO_PIN_2);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_1);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_3);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_4);	
	   __NOP();__NOP();__NOP();__NOP();__NOP();	 			
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_9)==0)KEY_qq=0x000010;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_6)==0)KEY_qq=0x000020;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_7)==0)KEY_qq=0x000040;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_8)==0)KEY_qq=0x000080;	

		GPIO_ResetBits(Key_Column_GPIO,GPIO_PIN_3);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_1);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_2);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_4);
		__NOP();__NOP();__NOP();__NOP();__NOP();	
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_9)==0)KEY_qq=0x000100;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_6)==0)KEY_qq=0x000200;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_7)==0)KEY_qq=0x000400;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_8)==0)KEY_qq=0x000800;	

		GPIO_ResetBits(Key_Column_GPIO,GPIO_PIN_4);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_1);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_2);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_3);	
		__NOP();__NOP();__NOP();__NOP();__NOP();	
		if((GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_9)==0)&&(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_7)==0))KEY_qq=0x00A000;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_9)==0)KEY_qq=0x001000;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_6)==0)KEY_qq=0x002000;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_7)==0)KEY_qq=0x004000;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_8)==0)KEY_qq=0x008000;	

		
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_5)==0)KEY_qq=0x010000;	

		KEY_s.x=KEY_qq;
	    if(KEY_s.x == 0)
		{
			KEY_s.Keylock1 = 0;
			KEY_s.KeyCnt1 = 0;
//			KEY_s.KeyLongValue = 0;//松手时不进行注册检查
			if(KEY_s.ShortKeyFlag1 == 1)
			{
				KEY_s.ShortKeyFlag1 = 0;
				if(KEY_s.y == 0x00000001)KEY_s.KeyValue =101;
				if(KEY_s.y == 0x00000002)KEY_s.KeyValue =102;
				if(KEY_s.y == 0x00000004)KEY_s.KeyValue =103;
				if(KEY_s.y == 0x00000008)KEY_s.KeyValue =104;			
				if(KEY_s.y == 0x00000010)KEY_s.KeyValue =105;
				if(KEY_s.y == 0x00000020)KEY_s.KeyValue =106;
				if(KEY_s.y == 0x00000040)KEY_s.KeyValue =107;
				if(KEY_s.y == 0x00000080)KEY_s.KeyValue =108;		
				if(KEY_s.y == 0x00000100)KEY_s.KeyValue =109;
				if(KEY_s.y == 0x00000200)KEY_s.KeyValue =110;
				if(KEY_s.y == 0x00000400)KEY_s.KeyValue =111;
				if(KEY_s.y == 0x00000800)KEY_s.KeyValue =112;						
				if(KEY_s.y == 0x00001000)KEY_s.KeyValue =113;					
				if(KEY_s.y == 0x00002000)KEY_s.KeyValue =114;
				if(KEY_s.y == 0x00004000)KEY_s.KeyValue =115;
				if(KEY_s.y == 0x00008000)KEY_s.KeyValue =116;						
				if(KEY_s.y == 0x00010000)KEY_s.KeyValue =117;
				
			}
		}
		else if(KEY_s.Keylock1 == 0)
		{	
			KEY_s.KeyCnt1 ++;
			if(KEY_s.KeyCnt1 >= 50)//80
			{
				KEY_s.ShortKeyFlag1 = 1;
				KEY_s.y = KEY_s.x ;
				if(KEY_s.x == 0x00002000)KEY_s.KeyValue =14;
				if(KEY_s.x == 0x00000200)KEY_s.KeyValue =10;	
				if(KEY_s.x == 0x00010000)KEY_s.KeyValue =17;					
				if(KEY_s.x == 0x00000002)KEY_s.KeyValue =2;		
			}
			if(KEY_s.KeyCnt1 == 1000)
			{
				KEY_s.ShortKeyFlag1 = 0;
				KEY_s.KeyCnt1 = 0;
				KEY_s.Keylock1 = 1;		
				if(KEY_s.x == 0x0000A000)KEY_s.KeyValue =201;
		
			}
		}
}


void KEY_Clr(void)
{
	KEY_s.KeyCnt1 = 0;
	KEY_s.Keylock1 = 1;  //长按标志位 如果清除 会导致长按以后马上进入短按状态
	KEY_s.KeyValue = 0;
//	KEY_s.ShortKeyFlag1 = 0;
	KEY_s.x = 0;
//	KEY_s.y = 0;
	KEY_s.z = 0;
}


/*
GPIO_Pin_1 GPIOB  0x01

*/



void KEY_Event_Handle(void)
{ 
	if(KEY_s.KeyValue != 101 && Power_State == OFF)
	{
		return;	
	}		
	switch(KEY_s.KeyValue)
	{
		case 0: break;
//============按下================		
		case 14: /*腿部 升*/	
			NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x00,0x03);			
			KEY_Clr();
			break;
		case 10: /*头部 升*/		
			NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x00,0x01);			
			KEY_Clr();
			break;
		case 17: /*腿部 降*/			
			NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x00,0x04);				
			KEY_Clr();
			break;
		case 2: /*头部 降*/		
			NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x00,0x02);			
			KEY_Clr();
			break;	
//============短按================
		case 101: /*电源*/	
			if(Power_State == OFF)		
			{
				Device_ON();
			}	
			else
			if(Power_State == ON)	
			{
				Device_OFF();
			}	
		  KEY_Clr();
			break;
	case 102: /*头部下降*/
			NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x00,0x12);				
		  Lcd_imga(7);
			Chinese_Show_one(LCD_font_x1, LCD_font_y, 4, 40, 0);  // 头
			Chinese_Show_one(LCD_font_x2, LCD_font_y, 1, 40, 0);  // 部
			Chinese_Show_one(LCD_font_x3, LCD_font_y, 5, 40, 0);  // 下
			Chinese_Show_one(LCD_font_x4, LCD_font_y, 6, 40, 0);  // 降
			KEY_Clr();
			break;
	case 103: /*减压舒眠*/
		  NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x00,0x22);
		  Lcd_imga(6);
			Chinese_Show_one(LCD_font_x1, LCD_font_y, 13, 40, 0);  // 减
			Chinese_Show_one(LCD_font_x2, LCD_font_y, 14, 40, 0);  // 压
			Chinese_Show_one(LCD_font_x3, LCD_font_y, 15, 40, 0);  // 舒
			Chinese_Show_one(LCD_font_x4, LCD_font_y, 16, 40, 0);  // 眠
			KEY_Clr();
			break;
	case 104: /*助力起床*/
		  NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x00,0x21);
		  Lcd_imga(4);
			Chinese_Show_one(LCD_font_x1, LCD_font_y, 9, 40, 0);  // 助
			Chinese_Show_one(LCD_font_x2, LCD_font_y, 10, 40, 0);  // 力
			Chinese_Show_one(LCD_font_x3, LCD_font_y, 11, 40, 0);  // 起
			Chinese_Show_one(LCD_font_x4, LCD_font_y, 12, 40, 0);  // 床
			KEY_Clr();
			break;
	case 105: /*手机阅读*/
		  NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x00,0x26);
		  Lcd_imga(4);
			Chinese_Show_one(LCD_font_x1, LCD_font_y, 17, 40, 0);  // 手
			Chinese_Show_one(LCD_font_x2, LCD_font_y, 18, 40, 0);  // 机
			Chinese_Show_one(LCD_font_x3, LCD_font_y, 19, 40, 0);  // 阅
			Chinese_Show_one(LCD_font_x4, LCD_font_y, 20, 40, 0);  // 读
			KEY_Clr();
			break;
	case 106: /*平躺模式*/
		  NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x00,0x2A);
		  Lcd_imga(2);
			Chinese_Show_one(LCD_font_x1, LCD_font_y, 7, 40, 0);  // 	平
			Chinese_Show_one(LCD_font_x2, LCD_font_y, 8, 40, 0);  // 	躺
			Chinese_Show_one(LCD_font_x3, LCD_font_y, 25, 40, 0);  // 模
			Chinese_Show_one(LCD_font_x4, LCD_font_y, 24, 40, 0);  // 式
			KEY_Clr();
			break;
	case 107: /*观影模式*/
		  NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x00,0x25);
		  Lcd_imga(8);
			Chinese_Show_one(LCD_font_x1, LCD_font_y, 22, 40, 0);  // 观
			Chinese_Show_one(LCD_font_x2, LCD_font_y, 23, 40, 0);  // 影
			Chinese_Show_one(LCD_font_x3, LCD_font_y, 25, 40, 0);  // 模
			Chinese_Show_one(LCD_font_x4, LCD_font_y, 24, 40, 0);  // 式
			KEY_Clr();
			break;
	case 108: /*零压力*/
		  NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x00,0x27);
		  Lcd_imga(6);
	    LCD_Fill(LCD_font_x1,LCD_font_y,LCD_font_x1+40,LCD_font_y+40,0x0000);	
	    LCD_Fill(LCD_font_x4,LCD_font_y,LCD_font_x4+40,LCD_font_y+40,0x0000);
			Chinese_Show_one(LCD_font_x1+20, LCD_font_y, 21, 40, 0);  // 零
			Chinese_Show_one(LCD_font_x2+20, LCD_font_y, 13, 40, 0);  // 压
			Chinese_Show_one(LCD_font_x3+20, LCD_font_y, 14, 40, 0);  // 力
	    
			KEY_Clr();
			break;
	case 109: /*轻松哺乳*/
		  NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x00,0x24);
		  Lcd_imga(6);
			Chinese_Show_one(LCD_font_x1, LCD_font_y, 26, 40, 0);  // 轻
			Chinese_Show_one(LCD_font_x2, LCD_font_y, 27, 40, 0);  // 松
			Chinese_Show_one(LCD_font_x3, LCD_font_y, 28, 40, 0);  // 哺
			Chinese_Show_one(LCD_font_x4, LCD_font_y, 29, 40, 0);  // 乳
			KEY_Clr();
			break;
	case 110: /*头部上升*/
			NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x00,0x11);							
		  Lcd_imga(7);
			Chinese_Show_one(LCD_font_x1, LCD_font_y, 4, 40, 0);  // 头
			Chinese_Show_one(LCD_font_x2, LCD_font_y, 1, 40, 0);  // 部
			Chinese_Show_one(LCD_font_x3, LCD_font_y, 2, 40, 0);  // 上
			Chinese_Show_one(LCD_font_x4, LCD_font_y, 3, 40, 0);  // 升
			KEY_Clr();
			break;
	case 111: /*打鼾干预*/
		  NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x00,0x28);
		  Lcd_imga(5);
			Chinese_Show_one(LCD_font_x1, LCD_font_y, 34, 40, 0);  // 打
			Chinese_Show_one(LCD_font_x2, LCD_font_y, 35, 40, 0);  // 鼾
			Chinese_Show_one(LCD_font_x3, LCD_font_y, 36, 40, 0);  // 干
			Chinese_Show_one(LCD_font_x4, LCD_font_y, 37, 40, 0);  // 预
			KEY_Clr();
			break;
	case 112: /*休闲放松*/
		  NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x00,0x2B);
      Lcd_imga(6); 		
			Chinese_Show_one(LCD_font_x1, LCD_font_y, 30, 40, 0);  // 休
			Chinese_Show_one(LCD_font_x2, LCD_font_y, 31, 40, 0);  // 闲
			Chinese_Show_one(LCD_font_x3, LCD_font_y, 26, 40, 0);  // 轻
			Chinese_Show_one(LCD_font_x4, LCD_font_y, 27, 40, 0);  // 松
			KEY_Clr();
			break;
	case 113: /*美腿舒压*/
		  NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x00,0x29);
		  Lcd_imga(3);
			Chinese_Show_one(LCD_font_x1, LCD_font_y, 38, 40, 0);  // 美
			Chinese_Show_one(LCD_font_x2, LCD_font_y, 0, 40, 0);   // 腿
			Chinese_Show_one(LCD_font_x3, LCD_font_y, 15, 40, 0);  // 舒
			Chinese_Show_one(LCD_font_x4, LCD_font_y, 14, 40, 0);  // 压
			KEY_Clr();
			break;
	case 114: /*腿部上升*/
			NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x00,0x13);						
		  Lcd_imga(7);
			Chinese_Show_one(LCD_font_x1, LCD_font_y, 0, 40, 0);   // 腿
			Chinese_Show_one(LCD_font_x2, LCD_font_y, 1, 40, 0);   // 部	
			Chinese_Show_one(LCD_font_x3, LCD_font_y, 2, 40, 0);   // 上
			Chinese_Show_one(LCD_font_x4, LCD_font_y, 3, 40, 0);   // 升
			KEY_Clr();
			break;
	case 115: /*瑜伽飞燕*/
		  NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x00,0x23);
		  Lcd_imga(6);
			Chinese_Show_one(LCD_font_x1, LCD_font_y, 38, 40, 0);  // 瑜
			Chinese_Show_one(LCD_font_x2, LCD_font_y, 40, 40, 0);  // 伽
			Chinese_Show_one(LCD_font_x3, LCD_font_y, 41, 40, 0);  // 飞
			Chinese_Show_one(LCD_font_x4, LCD_font_y, 42, 40, 0);  // 燕
			KEY_Clr();
			break;
	case 116: /*记忆*/

			KEY_Clr();
			break;
	case 117: /*腿部下降*/
			NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x00,0x14);						
		  Lcd_imga(7);
			Chinese_Show_one(LCD_font_x1, LCD_font_y, 0, 40, 0);   // 腿
			Chinese_Show_one(LCD_font_x2, LCD_font_y, 1, 40, 0);   // 部		
			Chinese_Show_one(LCD_font_x3, LCD_font_y, 5, 40, 0);   // 下
			Chinese_Show_one(LCD_font_x4, LCD_font_y, 6, 40, 0);   // 降
			KEY_Clr();
			break;
			
//============长按================	
		case 201: 
			NRF_Data_Storage7(0x66,0x66,0x66,0x66,0x66,0x66,0x66);	
			KEY_Clr();
			break;		

	}
}

void Key_Task(void)
{
  KEY_Event_Handle();
}	



